Developer Documentation

QuickTime 4 API Documentation

QuickTime 4 Reference

| Previous | Chapter Contents | Chapter Top | Next |

The Decompression Parameters Structure

Several fields have been added to the decompression parameters structure ( CodecDecompressParams ) originally documented in "The Decompression Parameters Structure" in Inside Macintosh: QuickTime Components, page 4-46.

In addition, there are several new flags in the codecConditions field. The first two fields listed below ( frameTime , reserved ) replace the last field ( reserved ) documented in Chapter 4 of Inside Macintosh: QuickTime Components.

struct CodecDecompressParams
{
...
/* The following fields are defined in QuickTime 2.0 or later */
    ICMFrameTimePtr     frameTime;      /* banddecompress */
    long                reserved[1];
    SInt8               matrixFlags;
    SInt8               matrixType;
    Rect                dstRect;    /*  only valid for simple transforms */

/* The following fields are defined in QuickTime 2.1 or later */
    UInt16              majorSourceChangeSeed;
    UInt16              minorSourceChangeSeed;
    CDSequenceDataSourcePtr     sourceData;
    
    RgnHandle       maskRegion;

/* The following fields are defined in QuickTime 2.5 or later */
    OSType              **wantedDestinationPixelTypes;      /* Handle to
                                            0-terminated list of OSTypes */

    long                screenFloodMethod;
    long                screenFloodValue;
    short               preferredOffscreenPixelSize;

/* The following fields are defined in QuickTime 3 or later */
    boolean             enableBlackLining;
    long                requestedBufferWidth;
    long                requestedBufferHeight;
/* The following fields are defined in QuickTime 3.5 or later */
    Rect            displayableAreaOfRequestedBuffer;
                    /* set in predecompress */

;

Field descriptions

frameTime
Contains a pointer to an ICMFrameTime structure. This structure contains a frame's time information for scheduled asynchronous decompression operations.

matrixFlags
Flags specifying information about the transformation matrix. Currently, can be 0 or one of the following:

enum {
    matrixFlagScale2x = 1L<<7,
    matrixFlagScale1x = 1L<<6,
    matrixFlagScaleHalf = 1L<<5
};

matrixType
Contains the type of the transformation matrix, as returned by GetMatrixType(). (For additional information refer to Inside Macintosh: QuickTime, p. 2-342).

dstRect
The destination rectangle. The result of the source rectangle ( srcRect ) transformed by the transformation matrix ( matrix ).

majorSourceChangeSeed
Contains an integer value that is incremented each time a data source is added or removed. This provides a fast way for a codec to know when it needs to redetermine which data source inputs are available.

minorSourceChangeSeed
Contains an integer value that is incremented each time a data source is added or removed, or the data contained in any of the data sources changes. This provides a way for a codec to know if the data available to it has changed.

sourceData
Contains a pointer to a CDSequenceDataSource structure. This structure contains a linked list of all data sources. Because each data source contains a link to the next data source, a codec can access all data sources from this field.

maskRegion
If the maskRegion field is not nil , it contains a QuickDraw region that is equivalent to the bit map contained in the maskBits field. For some codecs, using the QuickDraw region may be more convenient than the mask bit map.

wantedDestinationPixelTypes
Filled in by the codec during ImageCodecPreDecompress . Contains a handle to a zero-terminated list of non-RGB pixels that the codec can decompress to. Leave set to nil if the codec does not support non-RGB pixel spaces. The ICM copies this data structure, so it is up to the codec to dispose of it later. Since the predecompress call can be called often, it is suggested that codecs allocate this handle during the Open routine and dispose of it during the Close routine.

screenFloodMethod
For codecs that require key-color flooding. One of:

enum {
    kScreenFloodMethodNone = 0,
    kScreenFloodMethodKeyColor = 1,
    kScreenFloodMethodAlpha = 2
};

screenFloodValue
If screenFloodMethod is kScreenFloodMethodKeyColor , contains the index of the color that should be used to flood the image area on screen when a refresh occurs. This is valid for both indexed and direct screen devices (e.g., for devices with 16 bit depth, it should contain the 5-5-5 RGB value). If screenFloodMethod is kScreenFloodMethodAlpha , contains the value that the alpha-channel should be flooded with.

preferredOffscreenPixelSize
Should be filled in ImageCodecPreDecompress with the preferred depth of an offscreen buffer should the ICM have to create one. It is not guaranteed that an offscreen buffer will actually be of this depth. A codec should still be sure to specify what depths it can decompress to by using the capabilities field. A codec might use this field if if was capable of decompressing to several depths, but was faster decompressing to a particular depth.

enableBlackLining
If true, indicates that the client has requested blacklining (displaying every other line of the image). Blacklining increases the speed of movie playback while decreasing the image quality.

requestedBufferWidth
Specifies the width of the image buffer to use, in pixels. For this value to be used, the codecWantsSpecialScaling flag in the CodecCapabilities record must be set.

requestedBufferHeight
Specifies the height of the image buffer to use, in pixels. For this value to be used, the codecWantsSpecialScaling flag in the CodecCapabilities record must be set.

displayableAreaOfRequestedBuffer
This field can be used to prevent parts of the requested buffer from being displayed. When the codecWantsSpecialScaling flag is set, this rectangle can be filled-in to indicate what portion of the requested buffer's width and height should be used. The buffer rectangle created by the requested buffer is always based at (0,0), so this coordinate system is also used by displayableAreaOfRequestedBuffer . If this field is not filled-in, a default value of (0,0,0,0) is used, and the entire buffer is displayed. Use this field if you are experiencing edge problems with FlashPix images.

codecConditions flags

Several new flags exist that can be set in the codecConditions parameter. They are:

enum {
    codecConditionFirstScreen       = 1L << 12,
    codecConditionDoCursor          = 1L << 13,
    codecConditionCatchUpDiff       = 1L << 14,
    codecConditionMaskMayBeChanged  = 1L << 15,
    codecConditionToBuffer          = 1L << 16
};
codecConditionFirstScreen
Indicates when the codec is decompressing an image to the first of multiple screens. That is, if the decompressed image crosses multiple screens, then the codec can look at this flag to determine if this is the first time an image is being decompressed for each of the screens to which it is being decompressed.

A codec that depends on the maskBits field of decompressParams being a valid regionHandle on ImageCodecPreDecompress needs to know that in this case it is not able to clip images since the region handle is only passed for the first of the screens; clipping would be incorrect for the subsequent screen for that image.

codecConditionDoCursor
Set to 1 if the decompressor component should shield and unshield the cursor for the current decompression operation. This flag should be set only if the codec has indicated its ability to handle cursor shielding by setting the codecCanShieldCursor flag in the capabilities field during ImageCodecPreDecompress .

codecConditionCatchUpDiff
Indicates if the current frame is a "catch up" frame. Set this flag to 1 if the current frame is a catch-up frame. Note that you must also set the codecFlagCatchUpDiff flag to 1. This may be useful to decompressors that can drop frames when playback is falling behind.

codecConditionMaskMayBeChanged
The Image Compression Manager has always included support for decompressors that could provide a bit mask of pixels that were actually drawn when a particular frame was decompressed. If a decompressor can provide a bit mask of pixels that changed, the Image Compression Manager transfers to the screen only the pixels that actually changed.

QuickTime 2.1 extended this capability by adding a new condition flag ( codecConditionMaskMayBeChanged ) to the conditionFlags field of the decompression parameters structure. The decompressor should write back the mask only if this flag is set. This flag is used only by ImageCodecFlush .

codecConditionToBuffer
Set to 1 if the current decompression operation is decompressing into an offscreen buffer.


© 1999 Apple Computer, Inc.

| Previous | Chapter Contents | Chapter Top | Next |